package model

import (
	"context"
	"log"

	"agent.com/iagentgo/facade"
	"github.com/cloudwego/eino/components/prompt"
	"github.com/cloudwego/eino/schema"
)

type ModelStyle struct {
	chatTemplate prompt.ChatTemplate
}

func newModelStyle() *ModelStyle {
	return &ModelStyle{
		chatTemplate: getChatTemplate(),
	}
}

func getChatTemplate() prompt.ChatTemplate {
	// 创建模板，使用 FString 格式
	return prompt.FromMessages(schema.FString,
		// 系统消息模板
		schema.SystemMessage("你是一个{role}。你需要用{style}的语气回答问题。你的目标客观积极地回答问题。"),
		// 插入需要的对话历史（新对话的话这里不填）
		schema.MessagesPlaceholder("chat_history", true),
		// 用户消息模板
		schema.UserMessage("问题: {question}"),
		// 额外提供的数据
		schema.UserMessage("额外数据: {data}"),
	)
}

func (m *ModelStyle) getMessage(role, style string, req *facade.ChatRequest) []*schema.Message {
	messages, err := m.chatTemplate.Format(context.Background(), map[string]any{
		"role":     role,
		"style":    style,
		"question": req.Question,
		"data":     req.Data,
		// 对话历史（这个例子里模拟两轮对话历史）
		"chat_history": []*schema.Message{
			schema.UserMessage("你好"),
			schema.AssistantMessage("嘿！我是你的{role}鼓励师！有什么我可以帮你的吗？", nil),
			schema.UserMessage("我觉得自己写的代码太烂了"),
			schema.AssistantMessage("每个程序员都经历过这个阶段！重要的是你在不断学习和进步。记住，代码质量是通过持续改进来提升的。", nil),
		},
	})
	if err != nil {
		log.Fatalf("format template failed: %v\n", err)
	}
	return messages
}
